package controller;

import java.util.ArrayList;
import java.util.List;

import dto.*;
import entities.Cliente;
import entities.Cotizacion;
import entities.Empleado;
import entities.Presupuesto;
import entities.Proveedor;
import entities.Servicio;
import entities.TipoEvento;

public class DTOTransformer 
{
	
	public static synchronized ServicioDTO toServicioDTO(Servicio servicio)
	{
		ServicioDTO dto = null;
		if (servicio != null)
		{
			dto = new ServicioDTO();
			dto.setActivo(servicio.isActivo());
			dto.setDescripcion(servicio.getDescripcion());
			dto.setIdServicio(servicio.getIdServicio());
			dto.setNombre(servicio.getNombre());
			
			if(servicio.getProveedores()!=null)
			{
				List<Proveedor> proveedores = servicio.getProveedores();
				for (Proveedor proveedor : proveedores)
				{
					ProveedorDTO proveedorDTO = new ProveedorDTO();
					proveedorDTO.setCuit(proveedor.getCuit());
					proveedorDTO.setDireccion(proveedor.getDireccion());
					proveedorDTO.setEmail(proveedor.getEmail());
					proveedorDTO.setObservaciones(proveedor.getObservaciones());
					proveedorDTO.setRazonSocial(proveedor.getRazonSocial());
					
					List<Servicio> serviciosProveedores = proveedor.getServicios();
					for (Servicio servicioProveedor : serviciosProveedores)
					{
						ServicioDTO servProv = new ServicioDTO();
						servProv.setActivo(servicioProveedor.isActivo());
						servProv.setDescripcion(servicioProveedor.getDescripcion());
						servProv.setIdServicio(servicioProveedor.getIdServicio());
						servProv.setNombre(servicioProveedor.getNombre());
						proveedorDTO.addServicio(servProv);
					}
					proveedorDTO.setTelefono(proveedor.getTelefono());
					dto.addProveedor(proveedorDTO);
				}
			}
		}
		return dto;
	}
	
	public static synchronized Servicio toServicio(ServicioDTO servicio)
	{
		Servicio dto = null;
		if (servicio != null)
		{
			dto = new Servicio();
			dto.setActivo(servicio.isActivo());
			dto.setDescripcion(servicio.getDescripcion());
			dto.setIdServicio(servicio.getIdServicio());
			dto.setNombre(servicio.getNombre());
			
			if(servicio.getProveedores()!=null)
			{
				for (ProveedorDTO proveedor : servicio.getProveedores())
				{
					Proveedor proveedorDTO = new Proveedor();
					proveedorDTO.setCuit(proveedor.getCuit());
					proveedorDTO.setDireccion(proveedor.getDireccion());
					proveedorDTO.setEmail(proveedor.getEmail());
					proveedorDTO.setObservaciones(proveedor.getObservaciones());
					proveedorDTO.setRazonSocial(proveedor.getRazonSocial());
					proveedorDTO.setServicios(null); //TODO
					proveedorDTO.setTelefono(proveedor.getTelefono());
					dto.addProveedor(proveedorDTO);
					
				}
			}
		}
		return dto;
	}
	
	public static synchronized ProveedorDTO toProveedorDTO(Proveedor proveedor)
	{
		ProveedorDTO dto = null;
		if (proveedor != null)
		{
			dto = new ProveedorDTO();
			dto.setCuit(proveedor.getCuit());
			dto.setDireccion(proveedor.getDireccion());
			dto.setEmail(proveedor.getEmail());
			dto.setObservaciones(proveedor.getObservaciones());
			dto.setRazonSocial(proveedor.getRazonSocial());
			dto.setTelefono(proveedor.getTelefono());
			
			if(proveedor.getServicios()!=null)
			{
				for (Servicio servicio : proveedor.getServicios())
				{
					ServicioDTO servicioDTO = new ServicioDTO();
					servicioDTO=toServicioDTO(servicio);
					dto.addServicio(servicioDTO);
				}
			}
		}
		return dto;
	}
	
	public static synchronized Proveedor toProveedor(ProveedorDTO proveedor)
	{
		Proveedor dto = null;
		if (proveedor != null)
		{
			dto = new Proveedor();
			dto.setCuit(proveedor.getCuit());
			dto.setDireccion(proveedor.getDireccion());
			dto.setEmail(proveedor.getEmail());
			dto.setObservaciones(proveedor.getObservaciones());
			dto.setRazonSocial(proveedor.getRazonSocial());
			dto.setTelefono(proveedor.getTelefono());
			
			if(proveedor.getServicios()!=null)
			{
				for (ServicioDTO servicio : proveedor.getServicios())
				{
					Servicio servicioDTO = new Servicio();
					servicioDTO=toServicio(servicio);
					dto.addServicio(servicioDTO);
				}
			}
		}
		return dto;
	}
	
	public static synchronized PresupuestoDTO toPresupuestoDTO(Presupuesto presupuesto)
	{
		PresupuestoDTO dto = null;
		if (presupuesto != null)
		{
			dto = new PresupuestoDTO();
			dto.setEstado(presupuesto.getEstado());
			dto.setCliente(toClienteDTO(presupuesto.getCliente()));
			
			List<CotizacionDTO> cotizacionesDTO = new ArrayList<CotizacionDTO>();
			if(presupuesto.getCotizaciones()!=null)
			{
				for (Cotizacion coti : presupuesto.getCotizaciones())
				{
					CotizacionDTO cotiDTO = new CotizacionDTO();
					cotiDTO=toCotizacionDTO(coti);
					cotizacionesDTO.add(cotiDTO);
				}
			}
			dto.setCotizaciones(cotizacionesDTO);
			
			dto.setEmpleado(toEmpleadoDTO(presupuesto.getEmpleado()));
			dto.setFechaDesde(presupuesto.getFechaDesde());
			dto.setFechaHasta(presupuesto.getFechaHasta());
			dto.setFormaPago(presupuesto.getFormaPago());
			dto.setFormaPagoComentarios(presupuesto.getFormaPagoComentarios());
			dto.setGastosFijos(presupuesto.getGastosFijos());
			dto.setHorarioDesde(presupuesto.getHorarioDesde());
			dto.setHorarioHasta(presupuesto.getHorarioHasta());
			dto.setIdPresupuesto(presupuesto.getIdPresupuesto());
			dto.setInvitados(presupuesto.getInvitados());
			dto.setLimite(presupuesto.getLimite());
			dto.setNroCuotas(presupuesto.getNroCuotas());
			dto.setTasaInteres(presupuesto.getTasaInteres());
			dto.setTipoEvento(presupuesto.getTipoEvento());
			dto.setZona(presupuesto.getZona());
			dto.setZonaComentarios(presupuesto.getZonaComentarios());
		}
		return dto;
	}
	
	public static synchronized Presupuesto toPresupuesto(PresupuestoDTO presupuesto)
	{
		Presupuesto dto = null;
		if (presupuesto != null)
		{
			dto = new Presupuesto();
			dto.setEstado(presupuesto.getEstado());
			dto.setCliente(toCliente(presupuesto.getCliente()));
			
			List<Cotizacion> cotizaciones = new ArrayList<Cotizacion>();
			if(presupuesto.getCotizaciones()!=null)
			{
				for (CotizacionDTO cotiDTO : presupuesto.getCotizaciones())
				{
					Cotizacion coti = new Cotizacion();
					coti=toCotizacion(cotiDTO);
					cotizaciones.add(coti);
				}
			}
			dto.setCotizaciones(cotizaciones);
			
			dto.setEmpleado(toEmpleado(presupuesto.getEmpleado()));
			dto.setFechaDesde(presupuesto.getFechaDesde());
			dto.setFechaHasta(presupuesto.getFechaHasta());
			dto.setFormaPago(presupuesto.getFormaPago());
			dto.setFormaPagoComentarios(presupuesto.getFormaPagoComentarios());
			dto.setGastosFijos(presupuesto.getGastosFijos());
			dto.setHorarioDesde(presupuesto.getHorarioDesde());
			dto.setHorarioHasta(presupuesto.getHorarioHasta());
			dto.setIdPresupuesto(presupuesto.getIdPresupuesto());
			dto.setInvitados(presupuesto.getInvitados());
			dto.setLimite(presupuesto.getLimite());
			dto.setNroCuotas(presupuesto.getNroCuotas());
			dto.setTasaInteres(presupuesto.getTasaInteres());
			dto.setTipoEvento(presupuesto.getTipoEvento());
			dto.setZona(presupuesto.getZona());
			dto.setZonaComentarios(presupuesto.getZonaComentarios());
		}
		return dto;
	}
	
	
	public static synchronized CotizacionDTO toCotizacionDTO(Cotizacion cotizacion)
	{
		CotizacionDTO dto = null;
		if (cotizacion != null)
		{
			dto = new CotizacionDTO();
			dto.setComentarios(cotizacion.getComentarios());
			dto.setFechaCotizacion(cotizacion.getFechaCotizacion());
			dto.setFormaPagoProveedor(cotizacion.getFormaPagoProveedor());
			dto.setIdCotizacion(cotizacion.getIdCotizacion());
			dto.setPrecioCosto(cotizacion.getPrecioCosto());
			dto.setPrecioVenta(cotizacion.getPrecioVenta());
			dto.setProveedor(toProveedorDTO(cotizacion.getProveedor()));
			dto.setServicio(toServicioDTO(cotizacion.getServicio()));
		}
		return dto;
	}
	
	public static synchronized Cotizacion toCotizacion(CotizacionDTO  cotizacion)
	{
		Cotizacion dto = null;
		if (cotizacion != null)
		{
			dto = new Cotizacion();
			dto.setComentarios(cotizacion.getComentarios());
			dto.setFechaCotizacion(cotizacion.getFechaCotizacion());
			dto.setFormaPagoProveedor(cotizacion.getFormaPagoProveedor());
			dto.setIdCotizacion(cotizacion.getIdCotizacion());
			dto.setPrecioCosto(cotizacion.getPrecioCosto());
			dto.setPrecioVenta(cotizacion.getPrecioVenta());
			dto.setProveedor(toProveedor(cotizacion.getProveedor()));
			dto.setServicio(toServicio(cotizacion.getServicio()));
		}
		return dto;
	}
	
	public static synchronized ClienteDTO toClienteDTO(Cliente cliente)
	{
		ClienteDTO dto = null;
		if (cliente != null)
		{
			dto = new ClienteDTO();
			dto.setApellido(cliente.getApellido());
			dto.setCuil(cliente.getCuil());
			dto.setDireccion(cliente.getDireccion());
			dto.setEmail(cliente.getEmail());
			dto.setNombre(cliente.getNombre());
			dto.setObservaciones(cliente.getObservaciones());
			dto.setTelefono(cliente.getTelefono());
		}
		return dto;
	}
	
	public static synchronized Cliente toCliente(ClienteDTO cliente)
	{
		Cliente dto = null;
		if (cliente != null)
		{
			dto = new Cliente();
			dto.setApellido(cliente.getApellido());
			dto.setCuil(cliente.getCuil());
			dto.setDireccion(cliente.getDireccion());
			dto.setEmail(cliente.getEmail());
			dto.setNombre(cliente.getNombre());
			dto.setObservaciones(cliente.getObservaciones());
			dto.setTelefono(cliente.getTelefono());
		}
		return dto;
	}
	
	public static synchronized EmpleadoDTO toEmpleadoDTO(Empleado empleado)
	{
		EmpleadoDTO dto = null;
		if (empleado != null)
		{
			dto = new EmpleadoDTO();
			dto.setApellido(empleado.getApellido());
			dto.setDireccion(empleado.getDireccion());
			dto.setEmail(empleado.getEmail());
			dto.setLegajo(empleado.getLegajo());
			dto.setNombre(empleado.getNombre());
			dto.setNroDocumento(empleado.getNroDocumento());
			dto.setObservaciones(empleado.getObservaciones());
			dto.setSector(empleado.getSector());
			dto.setTelefono(empleado.getTelefono());
			dto.setTipoDocumento(empleado.getTipoDocumento());
		}
		return dto;
	}
	
	public static synchronized Empleado toEmpleado(EmpleadoDTO empleado)
	{
		Empleado dto = null;
		if (empleado != null)
		{
			dto = new Empleado();
			dto.setApellido(empleado.getApellido());
			dto.setDireccion(empleado.getDireccion());
			dto.setEmail(empleado.getEmail());
			dto.setLegajo(empleado.getLegajo());
			dto.setNombre(empleado.getNombre());
			dto.setNroDocumento(empleado.getNroDocumento());
			dto.setObservaciones(empleado.getObservaciones());
			dto.setSector(empleado.getSector());
			dto.setTelefono(empleado.getTelefono());
			dto.setTipoDocumento(empleado.getTipoDocumento());
		}
		return dto;
	}

	public static synchronized TipoEventoDTO toTipoEventoDTO(TipoEvento tipoEvento) 
	{
		TipoEventoDTO tipoEventoDTO = null;
		if (tipoEvento != null)
		{
			tipoEventoDTO = new TipoEventoDTO();
			tipoEventoDTO.setDescripcion(tipoEvento.getDescripcion());
			tipoEventoDTO.setIdTipoEvento(tipoEvento.getIdTipoEvento());
			
		}
		
		
		return tipoEventoDTO;
	}

	
	

}
